﻿Imports System.Data  
Imports System.IO
Imports System.Text
Imports System.Collections.ObjectModel  


Public Class CLoadInstrumentServicio

 Private RUTA       As String 
 Private COMANDO    As String 
 Private ARGUMENTOS As String 
 Private NOMARCHIVO As String 


 private nombreCampo(82) As String 


 Public Sub new()
   Dim servGrales As New CServiciosGenerales ()               


   RUTA       = CServicioLocalSQLServerDB.ObtenerRutaArchivoLoadInstrument ()
   COMANDO    = CServicioLocalSQLServerDB.ObtenerNombreComandoTLoderLoadInstrument ()
   ARGUMENTOS = CServicioLocalSQLServerDB.ObtenerParamComandoTLoderLoadInstrument () 
   NOMARCHIVO = servGrales.ObtenerPREFIJOARCHIVO()  &  CServicioLocalSQLServerDB.ObtenerNombreArchivoLoadInstrument ()
                

   CargarNombresCampos()
                
 End Sub






 Private Function CargarNombresCampos() As Boolean 

     Dim dt As DataTable 
     Dim i As Integer = 0 
   
  
       nombreCampo(0) = "Instrument" 'Campo de entrada

      Try
          dt = CServicioLocalSQLServerDB.ObtienerNombreCamposLI ()
          For Each registro As DataRow In dt.Rows 
             nombreCampo(registro("id_campo")) = registro("nom_campo") 
          Next

          Return True 
      Catch ex As Exception
          Return False 
      End Try


 End Function


Public function ObtenerInstrumentosDecalog(ByVal instrumento As String) As List(Of CInstrumentosConsulta)
Dim lstInst As new List(Of CInstrumentosConsulta)  

Dim dt As Datatable 
    

Try     

      dt = CServiciosMacrosSyBaseDB.ObtienerInstrumentosValmer (instrumento )

      If dt is Nothing then
         Return Nothing 
       End If

       For Each registro As DataRow In dt.Rows     
           lstInst.Add(New CInstrumentosConsulta (registro(0),registro (1) ))
       Next     
 
      Return lstInst
  Catch ex As Exception
      Return Nothing 
  End Try

End Function




 Public Function ObtenerNombreCampoLI(ByVal index As Integer) As String 

    If index >=0 and index<=81 then 
       Return nombreCampo(index)
    Else
       Return "XXXXXXXXX"
    end if    

        
End Function


Public Function ObtenerInsCorporativo(ByVal fecha As Date, ByRef sMsgError As String) As DataTable 
    Dim dt As DataTable 
        Try
            dt = CAccesoHTML.ObtenerDatosPorTipoEmisora(fecha,CAccesoHTML.TipoEmisora.Corporativo)  
            Return dt 
        Catch ex As Exception
            sMsgError = ex.Message 
            Return Nothing 
        End Try    
End Function


Public Function ObtenerInsGubernamental(ByVal fecha As Date, ByRef sMsgError As String) As DataTable 
    Dim dt As DataTable 
        Try
            dt = CAccesoHTML.ObtenerDatosPorTipoEmisora(fecha,CAccesoHTML.TipoEmisora.Gubernamental)  
            Return dt 
        Catch ex As Exception
            sMsgError = ex.Message 
            Return Nothing 
        End Try    
End Function


Public Function ObtenerInsBancario(ByVal fecha As Date, ByRef sMsgError As String) As DataTable 
    Dim dt As DataTable 
        Try
            dt = CAccesoHTML.ObtenerDatosPorTipoEmisora(fecha,CAccesoHTML.TipoEmisora.Bancario)  
            Return dt 
        Catch ex As Exception
            sMsgError = ex.Message 
            Return Nothing 
        End Try    
End Function


Public Function ObtenerInsNotas(ByVal fecha As Date, ByRef sMsgError As String) As DataTable 
    Dim dt As DataTable 
        Try
            dt = CAccesoHTML.ObtenerDatosPorTipoEmisora(fecha,CAccesoHTML.TipoEmisora.Notas)  
            Return dt 
        Catch ex As Exception
            sMsgError = ex.Message 
            Return Nothing 
        End Try    
End Function


Public Function ObtenerInsVectorValmer(ByVal fecha As Date, ByRef sMsgError As String) As DataTable 
    Dim dt As DataTable 
        Try
            dt = CAccesoHTML.ObtenerDatosPorTipoEmisora(fecha,CAccesoHTML.TipoEmisora.VectorValmer)  
            Return dt 
        Catch ex As Exception
            sMsgError = ex.Message 
            Return Nothing 
        End Try    
End Function




Public Function ObtenerPosicionesArchValmer(ByRef sMsgError As String ) As DataTable 
    Dim dt As DataTable 
        Try
            dt = CServicioLocalSQLServerDB.ObtenerPosicionesNumEnArchValmer ()
            Return dt 
        Catch ex As Exception
            sMsgError = ex.Message 
            Return Nothing 
        End Try    
End Function






Public sub AplicarReglasNegocio(ByVal fecha As Date,ByRef instrumentoInfo As CTLoadInstrument,ByRef dtCorporativo   As DataTable, _
                                                                                              ByRef dtGubernamental As DataTable, _
                                                                                              ByRef dtBancario      As DataTable, _ 
                                                                                              ByRef dtNotas         As DataTable, _
                                                                                              ByRef dtVectoValmer   As DataTable, _
                                                                                              ByRef dtPosiciones    As DataTable
                                                                                              ) 



 Dim posicionInstVV    As Integer  
 Dim posicionInstXTipo As Integer 
 Dim arregloInst() = instrumentoInfo.P_0_instrument.Split ("_")  


 If arregloInst.Length <> 3 then
    Throw New Exception ("TO500. El instrumento no es valido")
 End If


 Dim tv       As String = arregloInst (0)
 Dim emisora  As String = arregloInst (1)
 Dim serie    As String = arregloInst (2)



  '0. Tipo 

  If EsNota (instrumentoInfo.P_0_instrument,dtNotas ) = True  then 
     instrumentoInfo.P_1_tipo = "Notas"
  Else     
     instrumentoInfo.P_1_tipo  = CServicioLocalSQLServerDB.ObtenerTipoLI(tv)
  End If
   
    
  'Implementar regla 1 para los campos: ()
  
   Dim tipoEmisora As CAccesoHTML.TipoEmisora 
   Dim fuente      As DataTable 
   Dim dtCamposVV  As DataTable 


   Try
     dtcamposVV = CServicioLocalSQLServerDB.ObtenerCamposVectorValmer ()      
  Catch ex As Exception
      Throw ex
  End Try





   Select Case instrumentoInfo.P_1_tipo

       Case "Corporativo"
            tipoEmisora = CAccesoHTML.TipoEmisora.Corporativo   
            fuente = dtCorporativo 
            posicionInstXTipo = RegresaPosicionArchValmer(2,tipoEmisora,dtPosiciones )
       Case "Gubernamental"
             tipoEmisora = CAccesoHTML.TipoEmisora.Gubernamental    
             fuente = dtGubernamental 
             posicionInstXTipo = RegresaPosicionArchValmer(2,tipoEmisora,dtPosiciones ) 
       Case "Bancario"
             tipoEmisora = CAccesoHTML.TipoEmisora.Bancario    
             fuente = dtBancario 
             posicionInstXTipo = RegresaPosicionArchValmer(2,tipoEmisora,dtPosiciones )
       Case "Notas"
             tipoEmisora = CAccesoHTML.TipoEmisora.Notas    
             fuente = dtNotas 
             posicionInstXTipo = RegresaPosicionArchValmer(2,tipoEmisora,dtPosiciones )
       Case else
             tipoEmisora = CAccesoHTML.TipoEmisora.Ninguno     
             fuente = Nothing 
   End Select


    posicionInstVV  = RegresaPosicionArchValmer(2,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones )



   'Emision (2)
     instrumentoInfo.P_2_emision = if( SeBuscaEnVectorValmer(2,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo, RegresaPosicionArchValmer(2,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(2,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))
         
 
   'TV (6)
    instrumentoInfo.P_6_tv  = if( SeBuscaEnVectorValmer(6,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(6,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(6,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Rendimiento (7)
    instrumentoInfo.P_7_rendimiento  = if( SeBuscaEnVectorValmer(7,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(7,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(7,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'Emisora (8)

    instrumentoInfo.P_8_emisora   = if( SeBuscaEnVectorValmer(8,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(8,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(8,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'Tipo de Instrumento (9)

    instrumentoInfo.P_9_tipoinstrumento   = if( SeBuscaEnVectorValmer(9,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(9,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(9,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'Cupones por vencer (11)

     instrumentoInfo.P_11_cuponesporvencer = if( SeBuscaEnVectorValmer(11,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(11,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(11,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))
   
   'Cupones vencidos (12)
   

     instrumentoInfo.P_12_cuponevencidos   = if( SeBuscaEnVectorValmer(12,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(12,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(12,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'Periodo de Cupon (13)


     instrumentoInfo.P_13_periododecupo_1   = if( SeBuscaEnVectorValmer(13,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(13,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(13,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'Sobretasa de Mercado (15)

    instrumentoInfo.P_15_sobretasademercado  = if( SeBuscaEnVectorValmer(15,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(15,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(15,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'SobretasaTotal (16)

    instrumentoInfo.P_16_sobretasatotal   = if( SeBuscaEnVectorValmer(16,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(16,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(16,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Tasa Cupon (17)

    instrumentoInfo.P_17_tasacupon_1   = if( SeBuscaEnVectorValmer(17,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(17,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(17,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Fecha de Colocacion (19)

    instrumentoInfo.P_19_fechadecolocacion   = if( SeBuscaEnVectorValmer(19,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(19,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(19,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Fecha de Vencimiento (20)
    
    instrumentoInfo.P_20_fechadevencimiento   = if( SeBuscaEnVectorValmer(20,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(20,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV ,RegresaPosicionArchValmer(20,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))   

   'Dias por Vencer (21)

    instrumentoInfo.P_21_diasporvencer   = if( SeBuscaEnVectorValmer(21,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(21,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(21,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Precio Sucio MD (22)

    instrumentoInfo.P_22_preciosuciomd_1   = if( SeBuscaEnVectorValmer(22,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(22,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV ,RegresaPosicionArchValmer(22,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Precio Limpio MD (24)

      instrumentoInfo.P_24_preciolimpiomd    = if( SeBuscaEnVectorValmer(24,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(24,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV ,RegresaPosicionArchValmer(24,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'PrecioSucio24Hrs(25)

      instrumentoInfo.P_25_sucio24hrs    = if( SeBuscaEnVectorValmer(25,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(25,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(25,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Duracion Ajustada.(26)

     instrumentoInfo.P_26_duracionajustada    = if( SeBuscaEnVectorValmer(26,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(26,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV ,RegresaPosicionArchValmer(26,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Convexidad(27)

     instrumentoInfo.P_27_convexidad    = if( SeBuscaEnVectorValmer(27,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(27,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV ,RegresaPosicionArchValmer(27,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Valor Nominal Actualizado(28)

     instrumentoInfo.P_28_valornominalactualizado     = if( SeBuscaEnVectorValmer(28,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(28,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(28,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))   

   'Redemption Price (29)

     instrumentoInfo.P_29_redemptionprice     = if( SeBuscaEnVectorValmer(29,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(29,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(29,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Valores Inscritos(30)

     instrumentoInfo.P_30_valoresinscritos     = if( SeBuscaEnVectorValmer(30,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(30,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(30,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Monto enCirculacion (31)

     instrumentoInfo.P_31_montoencirculacion     = if( SeBuscaEnVectorValmer(31,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(31,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(31,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'Isin (32)

     instrumentoInfo.P_32_isin_1    = if( SeBuscaEnVectorValmer(32,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(32,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(32,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Isin (33)


     instrumentoInfo.P_33_isin_2    = if( SeBuscaEnVectorValmer(33,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(33,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(33,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Isin (34)

     instrumentoInfo.P_34_isin_3    = if( SeBuscaEnVectorValmer(34,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(34,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(34,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Curva de Descuento (35)

     instrumentoInfo.P_35_curvadedescuento     = if( SeBuscaEnVectorValmer(35,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(35,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(35,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))
   
   'Inicio de Cupon (38)

      instrumentoInfo.P_38_iniciodecupon     = if( SeBuscaEnVectorValmer(38,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(38,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(38,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Fin de Cupon (39)

     instrumentoInfo.P_39_findecupon     = if( SeBuscaEnVectorValmer(39,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(39,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(39,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'FITCH (40)

      instrumentoInfo.P_40_fitch    = if( SeBuscaEnVectorValmer(40,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(40,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(40,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'S&P (41)

       instrumentoInfo.P_41_syp    = if( SeBuscaEnVectorValmer(41,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(41,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(41,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Moodys (42)

        instrumentoInfo.P_42_moodys     = if( SeBuscaEnVectorValmer(42,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(42,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(42,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Sobretasa En Decalog (43)

        instrumentoInfo.P_43_sobretasaendecalog     = if( SeBuscaEnVectorValmer(43,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(43,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(43,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Sobretasa de colocacion (44)

        instrumentoInfo.P_44_sobretasadecolocacion     = if( SeBuscaEnVectorValmer(44,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(44,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(44,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'ISR (45)
  
        instrumentoInfo.P_45_isr     = if( SeBuscaEnVectorValmer(45,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(45,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(45,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))
   'Serie (47)

        instrumentoInfo.P_47_serie     = if( SeBuscaEnVectorValmer(47,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(47,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(47,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Dias por Vencer (53)

        instrumentoInfo.P_53_diasporvencer    = if( SeBuscaEnVectorValmer(53,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(53,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(53,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'FECHA EMISIÓN (54)

        instrumentoInfo.P_54_fechaemision     = if( SeBuscaEnVectorValmer(54,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(54,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(54,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'FECHA VENCIMIENTO (55)

         instrumentoInfo.P_55_fechavencimiento     = if( SeBuscaEnVectorValmer(55,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(55,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(55,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'F. INICIO CUPON (56)

          instrumentoInfo.P_56_finicicupon     = if( SeBuscaEnVectorValmer(56,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(56,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(56,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'F. FINAL CUPON (57)

         instrumentoInfo.P_57_ffinalcupon     = if( SeBuscaEnVectorValmer(57,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(57,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(57,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'PRECIO SUCIO MD (58)


        If tipoEmisora = CAccesoHTML.TipoEmisora.Notas then 
            instrumentoInfo.P_58_preciosuciomd     = if( SeBuscaEnVectorValmer(58,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(58,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(58,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))
        Else
             instrumentoInfo.P_58_preciosuciomd = ""

        End If 


   'PRECIO LIMPIO MD (59)

         If tipoEmisora = CAccesoHTML.TipoEmisora.Notas then 
            instrumentoInfo.P_59_preciolimpiomd     = if( SeBuscaEnVectorValmer(59,dtCamposVV ) = False, ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(59,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(59,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))
         Else
         
            instrumentoInfo.P_59_preciolimpiomd = ""
         End If 



         

   'VALOR NOMINAL (60)

         instrumentoInfo.P_60_valornominal     = if( SeBuscaEnVectorValmer(60,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(60,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(60,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'TÍTULOS DE LA EMISIÓN (61)

         instrumentoInfo.P_61_titulosdelemision     = if( SeBuscaEnVectorValmer(61,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(61,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(61,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'MONTO DE LA EMISIÓN (62)

         instrumentoInfo.P_62_montodelaemision     = if( SeBuscaEnVectorValmer(62,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(62,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV ,RegresaPosicionArchValmer(62,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'Tasa Cupón (63)

         instrumentoInfo.P_63_tasacupon    = if( SeBuscaEnVectorValmer(63,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(63,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(63,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'STRIKE 1 (64)

         instrumentoInfo.P_64_strike1     = if( SeBuscaEnVectorValmer(64,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(64,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(64,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'STRIKE 2 (65)

         instrumentoInfo.P_65_strike2     = if( SeBuscaEnVectorValmer(65,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(65,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(65,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'TASA MÁXIMA (TIM) (66)

         instrumentoInfo.P_66_tasamaxima_tim     = if( SeBuscaEnVectorValmer(66,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(66,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(66,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'TASA MÍNIMA GARANTIZADA (TMG) (67)

         instrumentoInfo.P_67_tasaminimagarantizada_tmg     = if( SeBuscaEnVectorValmer(67,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(67,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(67,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'SUBYACENTE (68)

         instrumentoInfo.P_68_subyacente     = if( SeBuscaEnVectorValmer(68,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(68,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(68,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'ESTRUCTURA (69)

         instrumentoInfo.P_69_estructura     = if( SeBuscaEnVectorValmer(69,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(69,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(69,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'DÍAS POR VENCER EMISIÓN (72)

         instrumentoInfo.P_72_diasporvenceremision     = if( SeBuscaEnVectorValmer(72,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo, RegresaPosicionArchValmer(72,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV ,RegresaPosicionArchValmer(72,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))


   'DÍAS POR VENCER EMISIÓN (73)

         instrumentoInfo.P_73_diasporvenceremision     = if( SeBuscaEnVectorValmer(73,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(73,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV, RegresaPosicionArchValmer(73,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'PERIODO CUPON (74)

         instrumentoInfo.P_74_periodocupon     = if( SeBuscaEnVectorValmer(74,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(74,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(74,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   'CUPONES POR VENCER (75)

         If tipoEmisora = CAccesoHTML.TipoEmisora.Notas then 
             instrumentoInfo.P_75_cuponesporvencer     = if( SeBuscaEnVectorValmer(75,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(75,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(75,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))
         Else
         
              instrumentoInfo.P_75_cuponesporvencer   = ""
         End If 
        
         

   'TIPO VALOR (79)

   
         instrumentoInfo.P_79_tipovalor     = if( SeBuscaEnVectorValmer(79,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(79,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(79,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))

   ' Acronimo (3)

         instrumentoInfo.P_3_acronimo =  instrumentoInfo.P_2_emision.Replace ("_","")
 
   'Long Name 1 (4)
  
        instrumentoInfo.P_4_longname1  =  instrumentoInfo.P_2_emision 

   'Tipo de Instrumento (Decalog) (5)

        instrumentoInfo.P_5_tipodeinstrumentodecalog = CServicioLocalSQLServerDB.ObtienerTipoInstDecalog(tv)

   'Fijo F, Revisable R,Descuento D (10) 

        instrumentoInfo.P_10_fijofrevisablerdescuentod   =  BrgTipo(instrumentoInfo.P_9_tipoinstrumento,instrumentoInfo.P_1_tipo)  
        
   'Periodo de Cupon (14)

        If Char.IsNumber (  instrumentoInfo.P_11_cuponesporvencer) and Char.IsNumber (instrumentoInfo.P_12_cuponevencidos) then 
            If (Convert.ToInt32 (instrumentoInfo.P_11_cuponesporvencer) = 0 and Convert.ToInt32 ( instrumentoInfo.P_12_cuponevencidos) = 0) or instrumentoInfo.P_9_tipoinstrumento.Equals("Zero Coupon Bond")  then 
                instrumentoInfo.P_14_periododecupon_2 ="INFI"
            
            Else 
                instrumentoInfo.P_14_periododecupon_2  = ObtenerPeriodo(instrumentoInfo.P_13_periododecupo_1 ) 
            End If

        Else  
            instrumentoInfo.P_14_periododecupon_2 =""
        End If

         
    'Tasa Cupon 2 (18)       
 
     If  instrumentoInfo.P_10_fijofrevisablerdescuentod.Equals("F") then 
         instrumentoInfo.P_18_tasacupon_2 = Iif( SeBuscaEnVectorValmer(18,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(18,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                                                               ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(18,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))
     else
         instrumentoInfo.P_18_tasacupon_2  = ""
     End If

     
    'Precio Sucio MD (23)
     instrumentoInfo.P_23_preciosuciomd_2 = instrumentoInfo.P_25_sucio24hrs 


    'Codigo Indice (36)

     If (instrumentoInfo.P_10_fijofrevisablerdescuentod.Equals ("R") and (Not instrumentoInfo.P_35_curvadedescuento.Trim.Equals (""))) or (instrumentoInfo.P_10_fijofrevisablerdescuentod.Equals ("V") and (instrumentoInfo.P_35_curvadedescuento.Trim.Equals ("Fondeo Bancario"))) then 
        instrumentoInfo.P_36_codigoindice =  CServicioLocalSQLServerDB.ObtienerTipoInstDecalog(instrumentoInfo.P_35_curvadedescuento.Trim)     
     else
        instrumentoInfo.P_36_codigoindice = ""
     End If

     'Tipo Interes (37)

     If instrumentoInfo.P_1_tipo.Equals("Notas") then 
            instrumentoInfo.P_37_tipointeres = ""
     Elseif instrumentoInfo.P_14_periododecupon_2.Equals ("INFI")
            instrumentoInfo.P_37_tipointeres = "P"
     Else
            instrumentoInfo.P_37_tipointeres = "L"
     End If


     'GuarTyp (46)

      If instrumentoInfo.P_1_tipo.Equals("Bancario") and (Not instrumentoInfo.P_8_emisora.Equals ("SHF")) and (not instrumentoInfo.P_8_emisora.Equals ("NAFIN"))  then
          instrumentoInfo.P_46_guartyp = "8"  
      Elseif  instrumentoInfo.P_1_tipo.Equals("Gubernamental") or instrumentoInfo.P_8_emisora.Equals ("SHF") then 
          instrumentoInfo.P_46_guartyp = "1"
      Elseif  instrumentoInfo.P_8_emisora.Equals ("NAFIN")
          instrumentoInfo.P_46_guartyp = "0"
      Else
          instrumentoInfo.P_46_guartyp = ""
      End If



     ' Tipo de Revision (48)
     
     If (instrumentoInfo.P_46_guartyp.Equals("8") and instrumentoInfo.P_14_periododecupon_2 ="INFI") or (instrumentoInfo.P_6_tv.Equals("I") and (instrumentoInfo.P_8_emisora.Equals("SHF") or instrumentoInfo.P_8_emisora.Equals("NAFIN") )  ) then 
         instrumentoInfo.P_48_tipoderevision = "PRLV"
      Else 
         instrumentoInfo.P_48_tipoderevision = ""
     End If


     'Tipo de Revision CS (49)

      If (instrumentoInfo.P_35_curvadedescuento.Trim.Equals ("Real Bruta (Yield)") or instrumentoInfo.P_35_curvadedescuento.Trim.Equals ("Real (Yield)")) and  (Not instrumentoInfo.P_46_guartyp.Equals("8")) then 
         instrumentoInfo.P_49_tipoderevisioncs  = "UDI"
      Elseif (instrumentoInfo.P_35_curvadedescuento.Trim.Equals ("Real Bruta (Yield)") or instrumentoInfo.P_35_curvadedescuento.Trim.Equals ("Real (Yield)")) and  (instrumentoInfo.P_46_guartyp.Equals("8")) 
         instrumentoInfo.P_49_tipoderevisioncs  = "BAR"
      ElseIf (Not instrumentoInfo.P_1_tipo.Equals("Corporativo"))
         instrumentoInfo.P_49_tipoderevisioncs  = ""
      ElseIf instrumentoInfo.P_14_periododecupon_2.Equals("028D")
         instrumentoInfo.P_49_tipoderevisioncs  = "R30"
      ElseIf instrumentoInfo.P_14_periododecupon_2.Equals("182D")
         instrumentoInfo.P_49_tipoderevisioncs  = "R180"
      ElseIf instrumentoInfo.P_14_periododecupon_2.Equals("091D")
         instrumentoInfo.P_49_tipoderevisioncs  = "R90"
      ElseIf instrumentoInfo.P_14_periododecupon_2.Equals("364D")
         instrumentoInfo.P_49_tipoderevisioncs  = "R360"
      ElseIf instrumentoInfo.P_14_periododecupon_2.Equals("MENS")
         instrumentoInfo.P_49_tipoderevisioncs  = "R30"
      Else
         instrumentoInfo.P_49_tipoderevisioncs  =  "CT"
      End If


      ' # of Days / Type (50)
      instrumentoInfo.P_50_numofdaystype = "O"

     
      'Category (51)
      If instrumentoInfo.P_6_tv.Equals ("I") and (instrumentoInfo.P_8_emisora.Equals("SHF") or instrumentoInfo.P_8_emisora.Equals("NAFIN")) then 
         instrumentoInfo.P_51_category = "6"
      else
         instrumentoInfo.P_51_category = ""
      End If


      '#Days (52)

       If instrumentoInfo.P_0_instrument.trim.Equals("") then 
          instrumentoInfo.P_52_numdays = ""
       ElseIf instrumentoInfo.P_6_tv.Equals("LD")
            instrumentoInfo.P_52_numdays = "30"
       Else
            instrumentoInfo.P_52_numdays = "-2"
       End If

       
       'CONCATENACION NOMBRE (70)
        
        Try

        
           if instrumentoInfo.P_1_tipo.Equals("Notas") then 
                Dim nombreAux As String = instrumentoInfo.P_69_estructura & "/TIM-" & instrumentoInfo.P_66_tasamaxima_tim & " TMG-" & instrumentoInfo.P_67_tasaminimagarantizada_tmg & "/" & instrumentoInfo.P_68_subyacente
                If nombreAux.Length < 40 then 
                    instrumentoInfo.P_70_concatenacion_nombre = nombreAux.Substring(0, nombreAux.Length - 1)
                Else 
                    instrumentoInfo.P_70_concatenacion_nombre = nombreAux.Substring(0,40)
                End If

           Else 
                instrumentoInfo.P_70_concatenacion_nombre = ""

           End If

       Catch ex As Exception
            instrumentoInfo.P_70_concatenacion_nombre = ""
       End Try


      'Nota en Decalog  (71)

         if instrumentoInfo.P_1_tipo.Equals("Notas") then
            instrumentoInfo.P_71_notaendecalog =  "N"
         Else
            instrumentoInfo.P_71_notaendecalog =  ""
         End If


      'Cupones vencidos (76) 

        if instrumentoInfo.P_1_tipo.Equals("Notas") then
           instrumentoInfo.P_76_cuponesvencidos = if( SeBuscaEnVectorValmer(76,dtCamposVV ) = False,ObtenerValorFuente(fuente,posicionInstXTipo,RegresaPosicionArchValmer(76,tipoEmisora,dtPosiciones), instrumentoInfo.P_0_instrument), _
                                                       ObtenerValorFuente(dtVectoValmer,posicionInstVV,RegresaPosicionArchValmer(76,CAccesoHTML.TipoEmisora.VectorValmer,dtPosiciones), instrumentoInfo.P_0_instrument))
        Else 
            instrumentoInfo.P_76_cuponesvencidos = ""
        End If




        'Periodo de Cupon (77)

        if instrumentoInfo.P_1_tipo.Equals("Notas") then
           Dim periodoCupon As Integer 
           Dim porvencer    As Integer 
           Dim vencidos     As Integer 

          With instrumentoInfo

              periodoCupon =  If(Char.IsNumber (.P_74_periodocupon), Convert.ToInt32 (.P_74_periodocupon),0) 
              porvencer    =  If(Char.IsNumber (.P_75_cuponesporvencer), Convert.ToInt32 (.P_75_cuponesporvencer),0) 
              vencidos     =  If(Char.IsNumber (.P_76_cuponesvencidos), Convert.ToInt32 (.P_76_cuponesvencidos ),0) 


              If (periodoCupon >= 20 and periodoCupon < 29) and porvencer <> 1 and vencidos <> 0 then              
                  instrumentoInfo.P_77_periododecupon = "028D"              
              elseIf (periodoCupon >= 90 and periodoCupon < 96) and porvencer <> 1 and vencidos <> 0 then     
                  instrumentoInfo.P_77_periododecupon = "091D"
              elseIf (periodoCupon >= 181 and periodoCupon < 186) and porvencer <> 1 and vencidos <> 0 then     
                  instrumentoInfo.P_77_periododecupon = "182D"
              elseIf (periodoCupon >= 30 and periodoCupon < 35) and porvencer <> 1 and vencidos <> 0 then     
                  instrumentoInfo.P_77_periododecupon = "MENS"
              elseIf (periodoCupon >= 363 and periodoCupon < 366) and porvencer <> 1 and vencidos <> 0 then     
                  instrumentoInfo.P_77_periododecupon = "364D"  
              Else 
                  instrumentoInfo.P_77_periododecupon = "INFI"                    
              End If                                                

          End With                                          

        Else
            instrumentoInfo.P_77_periododecupon = ""
        End If
        
        'Tipo Interes (78)

        if instrumentoInfo.P_1_tipo.Equals("Notas") then
           instrumentoInfo.P_78_tipointeres = "L"
        Else
           instrumentoInfo.P_78_tipointeres = ""
        End If



        ' TIPO DE REVISION (80)

        if instrumentoInfo.P_1_tipo.Equals("Notas") then
           instrumentoInfo.P_80_tipoderevision  = "NE"
        Else
           instrumentoInfo.P_80_tipoderevision = ""
        End If


        'Codigo Indice (81)

        if instrumentoInfo.P_1_tipo.Equals("Notas") and instrumentoInfo.P_68_subyacente.Equals("TIIE28")   then
           instrumentoInfo.P_81_codigoindice =  "3037"
         Else 
           instrumentoInfo.P_81_codigoindice =  ""
        End If


End Sub


Private Function RegresaPosicionArchValmer(ByVal id_campo As Integer, ByVal tipoInst As CAccesoHTML.TipoEmisora, ByRef dtposiciones As DataTable) As Integer 
 Dim resultado() As  DataRow = Nothing 

 resultado = dtposiciones.Select("ID_CAMPO = " & id_campo) 

 
 Select Case tipoInst 


    Case CAccesoHTML.TipoEmisora.Corporativo 
             If Not IsDBNull(resultado(0)("POSICION_CORPORATIVOS") ) THEN 
                 Return resultado(0)("POSICION_CORPORATIVOS")
             End If
    Case CAccesoHTML.TipoEmisora.Gubernamental 
             If Not IsDBNull(resultado(0)("POSICION_GUBERNAMENTAL") ) THEN 
                 Return resultado(0)("POSICION_GUBERNAMENTAL")
             End If

    Case CAccesoHTML.TipoEmisora.Bancario 
             If Not IsDBNull(resultado(0)("POSICION_BANCARIOS") ) THEN 
                 Return resultado(0)("POSICION_BANCARIOS")
             End If
    Case CAccesoHTML.TipoEmisora.Notas 

             If Not IsDBNull(resultado(0)("POSICION_NOTAS") ) THEN 
                 Return resultado(0)("POSICION_NOTAS")
             End If

    Case CAccesoHTML.TipoEmisora.VectorValmer 
             If Not IsDBNull(resultado(0)("POSICION_VECTOR_VALMER") ) THEN 
                 Return resultado(0)("POSICION_VECTOR_VALMER")
             End If
    Case Else
        Return -1
 End Select

     
     Return -1


End Function





Private Function ObtenerValorFuente(ByRef fuente As DataTable, ByVal posicionInst As Integer,   byval PosicionCampoX As Integer, ByVal emisionY As String) As String 
   Dim resultado() As  DataRow = Nothing 

   If  PosicionCampoX < 0 then 
       Return ""
   End If

 Try 

    resultado =   fuente.Select (fuente.Columns(posicionInst).ColumnName & "='" & emisionY  &"'")

   If Not resultado is Nothing then 
         If resultado.Count > 0 then          
            Return   resultado(0)(PosicionCampoX).ToString ()         
         Else 
             Return ""
         end if
   else
         Return ""
  End If
  
Catch ex As Exception
   Return ""
End Try

End Function





Private Function  SeBuscaEnVectorValmer(ByVal id As Integer, ByRef fuente As DataTable ) As Boolean
  Dim resultado() As DataRow 
  
  resultado = fuente.Select("id_campo = " & id)
  If resultado is Nothing then
     Return False   
  End If

  If resultado.Count > 0 then   
       Return True 
  else
       Return False 
  End If

End Function


private function EsNota(byval instrumento As String, ByRef dtNotas As DataTable) As Boolean 

Try

   If dtNotas IS Nothing then 
     Return False 
   End If

   Dim resultado() As DataRow =  dtNotas.Select(dtNotas.Columns(0).ColumnName & "= '" & instrumento & "'")
   If resultado.Count > 0 then       
      Return True
   Else
      Return false
   End If


Catch ex As Exception
     Return False 
End Try


End Function


Public Function BrgTipo(ByVal tipoInstrumento As String, ByVal tipo As String) As String 
  


  If (tipoInstrumento.IndexOf ("Fixed") >= 0)  or (tipoInstrumento.IndexOf ("Extendible")>=0) or (tipoInstrumento.IndexOf ("Bullet")>=0) or tipo.Equals ("Notas") then 
       Return "F"

  ElseIf (tipoInstrumento.IndexOf ("Floating")>=0) then 
        Return "R"      
       
  Else    
        Return ""
  End If


End Function


Public Function ObtenerPeriodo(ByVal periodoCupon1 As String) As String 

  Dim numDias As Integer 

   Try

      numDias = Convert.ToInt32 ( periodoCupon1.Substring(0,periodoCupon1.IndexOf ("Days")))

      Select Case numDias 

        Case 178 To 187
    
             Return "182D"
    
        Case 20 To 29
    
             Return "028D"
    
        Case 30 To 35
    
             Return "MENS"

        Case 80 To 96
    
             Return "091D"

        Case 300 To 366
    
             Return "364D"
        Case Else 
             Return ""
    End Select

   Catch ex As Exception

        Return ""
   End Try
   

End Function


Public Function GenerarArchivoPrecioNegativo(ByVal instrumento As String, ByVal fecha As Date, ByVal precio As Double, ByRef sMsgError As String) As Boolean 


Dim idError       As Integer 
Dim sEncabezado   As String = "#init,BBVABANCOMER,INSTRUMENT,TYPE_VAL" 
Dim arregloInst() = instrumento.Split ("_")  

If arregloInst.Length <> 3 then
    Throw New Exception ("Instrumento no es valido")
End If


 Dim tv       As String = arregloInst (0)
 Dim emisora  As String = arregloInst (1)
 Dim serie    As String = arregloInst (2)

 Dim registro      As String                                




   Try

        registro = "IShN.=" & instrumento & ",IMneC=" & tv & emisora & serie & ",ILgN=" & instrumento & ",LstP=" & precio & ", CalcDa=" & fecha.ToString ("dd-MM-yyyy") & ", QDa=" & fecha.ToString ("dd-MM-yyyy")


         dim sRutaYNombreArchivo = RUTA &  NOMARCHIVO 
         If sRutaYNombreArchivo.Equals ("") then 
            sMsgError = "No se pudo obtener la ruta y nombre del archivo."
            idError = CUtileria.GrabarBitacora ("LoadInstrument","GenerarArchivoPrecioNegativo",sMsgError)  
            CUtileria.CompletarRegBitacora (idError)     
            Return False 
         End If

          Using sw As StreamWriter = File.CreateText(sRutaYNombreArchivo)

                   sw.WriteLine (sEncabezado)
                   sw.WriteLine (registro)  
                   sw.Close()  
          End Using

          Return True 

  Catch ex As Exception
      sMsgError = "Error al generar el archivo: " & ex.Message 
      idError = CUtileria.GrabarBitacora ("LoadInstrument","GenerarArchivoPrecioNegativo",sMsgError)  
      CUtileria.CompletarRegBitacora (idError) 
    
      Return False 


   End Try




End Function






Public Function GenerarArchivoParaDecalog(ByRef registros As ObservableCollection(Of CTLoadInstrument), ByRef sMsgError As String) As Boolean 
 

 Dim dtCamposDecalog As DataTable 
 Dim fechaHoy        As String  = CServiciosMacrosSyBaseDB.FechaHoyDB.ToString("dd-MM-yyyy")    

'Encabezado
 Dim sEncabezado   As String = "#init,BBVABANCOMER,INSTRUMENT,TYPE_VAL" 
 Dim sLineaDefault As String = "IQtyExprT=Q,IQuotT2=P,IValuCurC=MXN,IValuExchC=80,RbRBas=4,IIssCtryC=MEX,IFacvCurC=MXN,INegLsiz=1,ICodT=XX,IConvFlg=2,CalcDa=" & fechaHoy & ", QDa=" & fechaHoy
 Dim sLineaActual  As String = ""
 Dim sValor        As String = ""
 Dim sFechaAux()   As String 

 Dim sRutaYNombreArchivo As String = ""


   Dim idRegBitGral    As Integer     
   Dim idError         as Integer 




  idRegBitGral = CUtileria.GrabarBitacora ("LoadInstrument","GenerarArchivoParaDecalog","inicio") 
 
'Ruta y nombre del archivo     
 sRutaYNombreArchivo = RUTA &  NOMARCHIVO 
 If sRutaYNombreArchivo.Equals ("") then 
    sMsgError = "No se pudo obtener la ruta y nombre del archivo."
    idError = CUtileria.GrabarBitacora ("LoadInstrument","GenerarArchivoParaDecalog",sMsgError)  
    CUtileria.CompletarRegBitacora (idError) 
    CUtileria.CompletarRegBitacora (idRegBitGral) 
    Return False 
 End If

'Campos Decalog 
 Try
     dtCamposDecalog = CServicioLocalSQLServerDB.ObtienerCamposDECALOGLI() 
 Catch ex As Exception
     sMsgError = "No se pudieron obtener campos DECALOG: " & ex.Message 
     idError = CUtileria.GrabarBitacora ("LoadInstrument","GenerarArchivoParaDecalog",sMsgError)  
     CUtileria.CompletarRegBitacora (idError) 
     CUtileria.CompletarRegBitacora (idRegBitGral)
     Return False 
 End Try
 

Try

    Using sw As StreamWriter = File.CreateText(sRutaYNombreArchivo)

           sw.WriteLine (sEncabezado) 'Encabezado

            For Each registro As CTLoadInstrument In registros 

                  If Not registro.P_0_instrument.Trim.Equals("") then 
        
                       For Each campo As DataRow In  dtCamposDecalog.Rows                                    

                            If IsDate (registro(campo("id_campo"))) then 
                                   sFechaAux = registro(campo("id_campo")).Split ("/")   'Se considera que la fecha en los arhivos viene con el formato: "yyyy/MM/dd"
                                   If sFechaAux.Length = 3 then 
                                      sValor = (New Date(sFechaAux(0),sFechaAux(1),sFechaAux(2)) ).ToString("dd-MM-yyyy")
                                   Else
                                      sValor = registro(campo("id_campo"))
                                   End If
                            Else  
                                sValor = registro(campo("id_campo"))
                            End If

                            If Not sValor.Trim.Equals("") then 
                               sLineaActual = sLineaActual &  campo("campo_decalog") & "=" & sValor  & ","                             
                               sValor = ""
                            End If


                            
                       Next        
                       sLineaActual = sLineaActual & sLineaDefault
                       sw.WriteLine (sLineaActual)  'Línea actual
                       sLineaActual = ""
                  End If
           Next

           sw.Close()  
    End Using


Catch ex As Exception
    sMsgError = "Error al generar el archivo: " & ex.Message 
    idError = CUtileria.GrabarBitacora ("LoadInstrument","GenerarArchivoParaDecalog",sMsgError)  
    CUtileria.CompletarRegBitacora (idError) 
    CUtileria.CompletarRegBitacora (idRegBitGral)
    Return False 
End Try

 CUtileria.CompletarRegBitacora (idRegBitGral)
 Return true

End Function


Public Sub  EjecutarProcesoLI()
    Dim serGeneral As New CServiciosGenerales ()

   
     Dim idRegBitGral    As Integer     
     Dim idError         as Integer 

 Try

   idRegBitGral = CUtileria.GrabarBitacora ("LoadInstrument","EjecutarProcesoLI","Inicio") 

   
            serGeneral.EjecutarProceso(RUTA & COMANDO, ARGUMENTOS & RUTA & NOMARCHIVO, "LoadInstrument")
   
     CUtileria.CompletarRegBitacora (idRegBitGral)
 Catch ex As Exception
    
     idError = CUtileria.GrabarBitacora ("LoadInstrument","EjecutarProcesoLI",ex.Message) 
     CUtileria.CompletarRegBitacora (idError)
     CUtileria.CompletarRegBitacora (idRegBitGral)
 End Try

                              

End sub




Public Function  ObtenerTipoValor(ByVal  tipoEmisora As CTipoValorLI.TipoEmisora ) As ObservableCollection(Of CTipoValorLI )

Dim dt As DataTable 
Dim lstTiposValmorValmer As New ObservableCollection(Of CTipoValorLI )

 Try

    dt =  CServicioLocalSQLServerDB.ObtenerTiposLI(tipoEmisora)

    For Each renglon As DataRow In dt.Rows         
        lstTiposValmorValmer.Add (New CTipoValorLI  (tipoEmisora,renglon ("tv")))
    Next
    Return lstTiposValmorValmer 

 Catch ex As Exception
    Throw ex
 End Try

End Function

Public Function AltaTipoValorLI(ByVal tipoEmisora As CTipoValorLI.TipoEmisora, ByVal descEmisora As String, ByVal tipoValor As String) As Boolean 
Try 
   if CServicioLocalSQLServerDB.AltaTipoValorLI (tipoEmisora,descEmisora,tipoValor )  = True then 
       Return true
    Else 
       Throw New Exception("Falló el alta en la Base de Datos")
   End If

Catch ex As Exception
   Throw ex 
End Try

End Function

Public Function ActualizarTipoLI(ByVal tipoEmisora As CTipoValorLI.TipoEmisora, ByVal tipoValorANT As String,ByVal tipoValorNVO As String ) As Boolean

   Try 
   if CServicioLocalSQLServerDB.ActualizarTipoValorLI ( tipoEmisora,tipoValorANT,tipoValorNVO ) = True then 
       Return true
   Else 
        Throw New Exception("Falló la actualización en la Base de Datos")
   End If

Catch ex As Exception
   Throw ex 
End Try

End Function

Public Function EliminarTipoLI(ByVal tipoEmisora As CTipoValorLI.TipoEmisora, ByVal tipoValor As String) As Boolean 
Try 
   if CServicioLocalSQLServerDB.EliminarTipoValorLI (tipoEmisora,tipoValor  )  = True then 
       Return true
    Else 
        Throw New Exception("Falló la baja en la Base de Datos")
   End If

Catch ex As Exception
   Throw ex 
End Try

End Function





Public Function  obtenerDecalogData() As ObservableCollection(Of CTDecalogData)
Dim lstDecData As New ObservableCollection(Of CTDecalogData )
Dim dt As DataTable 

Try
    dt =  CServicioLocalSQLServerDB.ObtenerDECDATALI ()
    
    For Each registro As DataRow In dt.Rows 
        lstDecData.Add(New CTDecalogData ( registro("VALOR_BUSCADO"),registro("VALOR_CORRESPON")) )                                 
    Next
  
Catch ex As Exception
    Return Nothing 
End Try


   Return lstDecData

End Function

Public Function AltaDecalogdata(ByVal valBuscado As String, ByVal valorCorrespond As String) As Boolean 
Try 
   if CServicioLocalSQLServerDB.AltaDECDATALI(valBuscado,valorCorrespond)  = True then 
       Return true
    Else 
       Throw New Exception("Falló el alta en la Base de Datos")
   End If

Catch ex As Exception
   Throw ex 
End Try

End Function

Public Function ActualizarDecalogData(ByVal valBusANT As String, ByVal valCorrANT As String,ByVal valBusNVO As String, ByVal valCorrNVO As String) As Boolean

   Try 
   if CServicioLocalSQLServerDB.ActualizarDECDATALI (valBusANT, valCorrANT,valBusNVO, valCorrNVO) = True then 
       Return true
   Else 
        Throw New Exception("Falló la actualización en la Base de Datos")
   End If

Catch ex As Exception
   Throw ex 
End Try

End Function

Public Function EliminarDecalogData(ByVal valBuscado As String, ByVal valorCorrespond As String) As Boolean 
Try 
   if CServicioLocalSQLServerDB.EliminarDECDATALI (valBuscado,valorCorrespond)  = True then 
       Return true
    Else 
        Throw New Exception("Falló la baja de nombre Bench en la Base de Datos")
   End If

Catch ex As Exception
   Throw ex 
End Try

End Function
 



End Class







        'nombreCampo(0) =  "Instrument"
        'nombreCampo(1) =  "Tipo"
        'nombreCampo(2) =  "Emision"
        'nombreCampo(3) =  "Acronimo"
        'nombreCampo(4) =  "Long Name 1"
        'nombreCampo(5) =  "Tipo de Instrumento (Decalog)"
        'nombreCampo(6) =  "TV"
        'nombreCampo(7) =  "Rendimiento"
        'nombreCampo(8) =  "Emisora"
        'nombreCampo(9) =  "Tipo Instrumento"
        'nombreCampo(10) = "Fijo F, Revisable R,Descuento D"
        'nombreCampo(11) = "Cupones por vencer"
        'nombreCampo(12) = "Cupones vencidos"
        'nombreCampo(13) = "Periodo de Cupon"
        'nombreCampo(14) = "Periodo de Cupon"
        'nombreCampo(15) = "Sobretasa de Mercado"
        'nombreCampo(16) = "SobretasaTotal"
        'nombreCampo(17) = "Tasa Cupon"
        'nombreCampo(18) = "Tasa Cupon"
        'nombreCampo(19) = "Fecha de Colocacion"
        'nombreCampo(20) = "Fecha de Vencimiento"
        'nombreCampo(21) = "Dias por Vencer"
        'nombreCampo(22) = "Precio Sucio MD"
        'nombreCampo(23) = "Precio Sucio MD"
        'nombreCampo(24) = "Precio Limpio MD"
        'nombreCampo(25) = "PrecioSucio24Hrs"
        'nombreCampo(26) = "Duracion Ajustada."
        'nombreCampo(27) = "Convexidad"
        'nombreCampo(28) = "Valor Nominal Actualizado"
        'nombreCampo(29) = "Redemption Price"
        'nombreCampo(30) = "Valores Inscritos"
        'nombreCampo(31) = "Monto enCirculacion"
        'nombreCampo(32) = "Isin"
        'nombreCampo(33) = "Isin"
        'nombreCampo(34) = "Isin"
        'nombreCampo(35) = "Curva de Descuento"
        'nombreCampo(36) = "Codigo Indice"
        'nombreCampo(37) = "Tipo Interes"
        'nombreCampo(38) = "Inicio de Cupon"
        'nombreCampo(39) = "Fin de Cupon"
        'nombreCampo(40) = "FITCH"
        'nombreCampo(41) = "S&P"
        'nombreCampo(42) = "Moodys"
        'nombreCampo(43) = "Sobretasa En Decalog"
        'nombreCampo(44) = "Sobretasa de colocacion"
        'nombreCampo(45) = "ISR"
        'nombreCampo(46) = "GuarTyp"
        'nombreCampo(47) = "Serie"
        'nombreCampo(48) = "Tipo de Revision"
        'nombreCampo(49) = "Tipo de Revision CS"
        'nombreCampo(50) = "# of Days / Type"
        'nombreCampo(51) = "Category"
        'nombreCampo(52) = "#Days"
        'nombreCampo(53) = "Dias por Vencer"
        'nombreCampo(54) = "FECHA EMISIÓN"
        'nombreCampo(55) = "FECHA VENCIMIENTO"
        'nombreCampo(56) = "F. INICIO CUPON"
        'nombreCampo(57) = "F. FINAL CUPON"
        'nombreCampo(58) = "PRECIO SUCIO MD"
        'nombreCampo(59) = "PRECIO LIMPIO MD"
        'nombreCampo(60) = "VALOR NOMINAL"
        'nombreCampo(61) = "TÍTULOS DE LA EMISIÓN"
        'nombreCampo(62) = "MONTO DE LA EMISIÓN"
        'nombreCampo(63) = "Tasa Cupón"
        'nombreCampo(64) = "STRIKE 1"
        'nombreCampo(65) = "STRIKE 2"
        'nombreCampo(66) = "TASA MÁXIMA (TIM)"
        'nombreCampo(67) = "TASA MÍNIMA GARANTIZADA (TMG)"
        'nombreCampo(68) = "SUBYACENTE"
        'nombreCampo(69) = "ESTRUCTURA"
        'nombreCampo(70) = "CONCATENACION NOMBRE"
        'nombreCampo(71) = "Nota en Decalog"
        'nombreCampo(72) = "DÍAS POR VENCER EMISIÓN"
        'nombreCampo(73) = "DÍAS POR VENCER EMISIÓN"
        'nombreCampo(74) = "PERIODO CUPON"
        'nombreCampo(75) = "CUPONES POR VENCER"
        'nombreCampo(76) = "Cupones vencidos"
        'nombreCampo(77) = "Periodo de Cupon"
        'nombreCampo(78) = "Tipo Interes"
        'nombreCampo(79) = "TIPO VALOR"
        'nombreCampo(80) = "TIPO DE REVISION"
        'nombreCampo(81) = "Codigo Indice"